package org.opens.hutool.convert;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.CharsetUtil;
import org.junit.Test;

import java.util.Date;
import java.util.List;

/**
 * https://blog.csdn.net/qq_42453117/article/details/103454856
 */
public class ConvertDemo {

    /**
     * 功能:
     *      实现String[]转换为Integer[].
     * 输出:
     *      [Ljava.lang.Integer;@2d6e8792
     */
    @Test
    public void testStringArrToIntegerArr() {
        String[] s = {"1", "2", "3"};
        Integer[] integers = Convert.toIntArray(s);

        Integer[] intArray = Convert.toIntArray(s);
        Double[] doubleArray = Convert.toDoubleArray(s);
        Float[] floatArray = Convert.toFloatArray(s);
        Character[] charArray = Convert.toCharArray(s);

        System.out.println(integers);
    }

    /**
     * 功能:
     *      实现类型转换.
     * 输出:
     *      324235
     *      -1
     * 说明:
     *      1. cn.hutool.core.convert.Convert#toInt(java.lang.Object, java.lang.Integer)方法的第二个参数是转换发生异常时使用的默认值.
     *      2. cn.hutool.core.convert.Convert#toInt(java.lang.Object)转换发生异常会报错.
     */
    @Test
    public void testConvertToInt() {
        String a = "324235";
        String b = "---324235";

        Integer integer = Convert.toInt(a);
        Integer integer1 = Convert.toInt(b, -1);

        System.out.println(integer);
        System.out.println(integer1);
    }

    /**
     * 功能:
     *      使用Convert转换String为Date.
     * 输出:
     *      Sat Dec 14 00:00:00 CST 2019
     *      Sat Dec 14 00:00:00 CST 2019
     *      Sat Dec 14 19:22:18 CST 2019
     *      Sat Dec 14 19:22:18 CST 2019
     * 说明:
     *      1. cn.hutool.core.convert.Convert#toDate(java.lang.Object, java.util.Date)这个方法的第二个参数为转换失败的默认值, 这种指定默认值是一种提高程序容错率
     *      的手段.
     */
    @Test
    public void testConvertToDate() {
        String str1 = "2019-12-14";
        String str2 = "2019-12-14 00:00:00";
        String str3 = "2019_x12-14";
        String str4 = null;

        Date date1 = Convert.toDate(str1);
        Date date2 = Convert.toDate(str2);
        Date date3 = Convert.toDate(str3, new Date());
        Date date4 = Convert.toDate(str4, new Date());

        System.out.println(date1);
        System.out.println(date2);
        System.out.println(date3);
        System.out.println(date4);
    }

    @Test
    public void testConvertToList() {
        String[] s = {"1", "2", "3"};
        List<?> list = Convert.toList(s);
        System.out.println(list);
    }

    /**
     * 功能:
     *      字符串的16进制形式互相转换.
     * 输出:
     *      e4bda0e5a5bde4b896e7958c
     *      你好世界
     */
    @Test
    public void strToHexStr() {
        String s = "你好世界";
        //将字符串转换为16进制字符串
        String hex = Convert.toHex(s, CharsetUtil.CHARSET_UTF_8);
        //将16进制字符串转换为字符串
        String str = Convert.hexToStr(hex, CharsetUtil.CHARSET_UTF_8);

        System.out.println(hex);
        System.out.println(str);
    }

    /**
     * 功能:
     *      普通字符串和Unicode编码互相转换.
     * 输出:
     *      \u4f60\u597d\u4e16\u754cbbb
     *      你好世界bbb
     */
    @Test
    public void strToUnicode() {
        String s = "你好世界bbb";
        //普通字符串-> Unicode编码
        String unicode = Convert.strToUnicode(s);
        //Unicode编码-> 普通字符串
        String str = Convert.unicodeToStr(unicode);

        System.out.println(unicode);
        System.out.println(str);
    }

    /**
     * 功能:
     *      网页数据编码和程序编码转换.
     * 输出:
     *      ä½ å¥½ä¸ç
     *      你好世界
     * 说明:
     *      1. cn.hutool.core.convert.Convert#convertCharset(java.lang.String, java.lang.String, java.lang.String)方法的参数说明:
     *          - 第一个参数为要操作的字符串;
     *          - 第二个参数为要操作的字符串的原始编码;
     *          - 第三个参数为要转换为什么样的编码格式.
     */
    @Test
    public void urlStrToUtf8() {
        String s = "你好世界";
        //将字符串先转成乱码
        String str = Convert.convertCharset(s, CharsetUtil.UTF_8, CharsetUtil.ISO_8859_1);
        //处理乱码
        String result = Convert.convertCharset(str, CharsetUtil.ISO_8859_1, CharsetUtil.UTF_8);

        System.out.println(str);
        System.out.println(result);
    }

    /**
     * 功能:
     *      数字转中文货币.
     * 输出:
     *      贰仟零壹拾玖元壹角叁分
     */
    @Test
    public void digitToChinese() {
        double money = 20144542154129.127;
        String s = Convert.digitToChinese(money);

        System.out.println(s);
    }



}
